package com.globalwave.common.validator
{
    import mx.validators.StringValidator;
    import mx.validators.ValidationResult;

    public class SmartValidator extends mx.validators.StringValidator
    {
	  /*
	  ^\d+$　　//匹配非负整数（正整数 + 0）
	  ^[0-9]*[1-9][0-9]*$　　//匹配正整数
	  ^((-\d+)|(0+))$　　//匹配非正整数（负整数 + 0）
	  ^-[0-9]*[1-9][0-9]*$　　//匹配负整数
	  ^-?\d+$　　　　//匹配整数
	  ^\d+(\.\d+)?$　　//匹配非负浮点数（正浮点数 + 0）
	  ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$　　//匹配正浮点数
	  ^((-\d+(\.\d+)?)|(0+(\.0+)?))$　　//匹配非正浮点数（负浮点数 + 0）
	  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$　　//匹配负浮点数
	  ^(-?\d+)(\.\d+)?$　　//匹配浮点数
	  ^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串
	  ^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串
	  ^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串
	  ^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串
	  ^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串
	  ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$　　　　//匹配email地址
	  ^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$　　
	  //匹配url 匹配中文字符的正则表达式： [\u4e00-\u9fa5]
	  匹配双字节字符(包括汉字在内)：[^\x00-\xff]
	  匹配空行的正则表达式：\n[\s| ]*\r
	  匹配HTML标记的正则表达式：/<(.*)>.*<\/>|<(.*) \/>/
	  匹配首尾空格的正则表达式：(^\s*)|(\s*$)
	  匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
	  匹配网址URL的正则表达式：^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
	  匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$
	  匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
	  匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$
	  */
		
	    public function SmartValidator()
	    {
	        super();
	        this.requiredFieldError = "请输入必要的信息！" ;
	        // This string is longer than the maximum allowed length. This must be less than {0} characters long.
	        //this.invalidCharError = "你输入的信息含有非数字字符！" ;
	    }
		
		public static const EMAIL:String = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ;
		public var rule:String ;
		public var isNumber:Boolean = false ;
		public var maxValue:Object ;
		public var minValue:Object ;
		
		
		protected override function doValidation(value:Object):Array{    
			//受保护的方法    protect  ;  doValidation(value:Object):Array  ; 执行此验证程序的验证逻辑，包括验证缺少值或空值是否会导致如 required 属性的值所定义的验证错误。 
			var results:Array=super.doValidation(value);
			
			if(value == null)
			{
				return results ;
			}
			
			if (isNumber) {
				// Return if there are errors
				// or if the required property is set to <code>false</code> and length is 0.
				var val:String = value ? String(value) : "";
				if (results.length > 0 || ((val.length == 0) && !required)){
					return results;
				} else {
					var numberValidator:NumberValidator = new NumberValidator();
					numberValidator.maxValue = this.maxValue ;
					numberValidator.minValue = this.minValue ;
					return numberValidator.doNumberValidation(value);
				}
			}
			
			if (rule != null) {
				//var pattern:RegExp=new RegExp("\\d+\\x20[A-Za-z]+");
				
				var ruleReg:String = rule ;
				if (rule == "email") {
					ruleReg = EMAIL ;
				} 
				
				var pattern:RegExp=new RegExp(ruleReg);
				if(value.search(pattern)==-1){
					results.push(new ValidationResult(true,null,"FormatError","你输入的格式不正确，请重新输入！"));
					// 携带的错误信息 
				}
			}
			
			
			return results;//返回字符串如果为空 就通过验证  如果有内容  那就是验证失败的结果信息 
		}
    }
}